package com.niiwoo.civet.user.service;

import com.niiwoo.civet.user.dto.UserForbidDubboInfoDTO;
import com.niiwoo.civet.user.dto.request.AddUserLoanLimitRequestDTO;
import com.niiwoo.civet.user.dto.response.UserBlackListInfoDTO;
import com.niiwoo.civet.user.dto.response.UserLibraLoanLimitDTO;
import com.niiwoo.civet.user.dto.response.ValidUserForbidResponseDTO;
import com.niiwoo.civet.user.enums.ProductTypeEnum;
import com.niiwoo.civet.user.enums.UserForbidTypeEnum;

/**
 * @Author: wuke
 * @Description:
 * @Date: Created in 17:39 2017/11/7
 */
public interface UserForbidDubboService {
    /**
     * 查询当前时间有效的行为禁止类型信息
     * @param userId
     * @param userForbidTypeEnum
     * @return
     */
    public ValidUserForbidResponseDTO queryValidUserForbidInfo(String userId,UserForbidTypeEnum userForbidTypeEnum);

    public void validUserForbidInfo(String userId, UserForbidTypeEnum userForbidTypeEnum);

    public void saveUserForbidInfo(UserForbidDubboInfoDTO userForbidDubboInfoDTO);

    /**
     * 查询用户黑灰名单(黑名单优先)
     * @param userId
     * @return
     */
    UserBlackListInfoDTO getUserBlackListInfo(String userId);

    /**
     * 查询用户天秤借款受限
     * @param userId
     * @param productTypeEnum 产品类型
     * @return
     */
    @Deprecated
    UserLibraLoanLimitDTO getUserLibraLoanLimit(String userId, ProductTypeEnum productTypeEnum);

    /**
     * 查询用户天秤借款受限
     * @param userId
     * @param projectType
     * @return
     */
    default UserLibraLoanLimitDTO getUserLibraLoanLimit(String userId, Byte projectType){
        throw new UnsupportedOperationException("UnImplement");
    }

    /**
     * 新增用户行为限制
     * @param addUserLoanLimitRequestDTO
     */
    void addUserLibraLoanLimit(AddUserLoanLimitRequestDTO addUserLoanLimitRequestDTO);
    
    /**
     * 新增用户行为限制-限制所有产品类型
     * @param addUserLoanLimitRequestDTO
     */
    default void addUserLibraLoanLimitAllType(AddUserLoanLimitRequestDTO addUserLoanLimitRequestDTO) {}

    /**
     *命中平台黑灰名单且在限制时间内
     * @param userId
     * @return
     */
    int getUserBlackList(String userId);

    /**
     * 卡牛行为限制
     * @param id
     * @param userId
     * @param userForbidTypeEnum
     */
    default ValidUserForbidResponseDTO cardNiuvalidUserForbidInfo(Long id,String userId, UserForbidTypeEnum userForbidTypeEnum){
        throw new UnsupportedOperationException("");
    }

    /**
     * 是否命中黑灰名单?
     * @param
     * @return
     */
    default boolean isHitBlackList(String mobile,String idCard) {
        return false;
    }
}
